package cn.iocoder.yudao.module.erp.service.dp;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.dispatchvehicle.vo.DispatchVehicleSaveReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpnj.vo.DpNjPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpnj.vo.DpNjSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dispatchvehicle.DispatchVehicleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dp.DpNjDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemNjDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpEastListNjDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dplist.DpWestListNjDO;

import javax.validation.Valid;
import java.util.List;

/**
 * ERP南疆口岸仓库制单 Service 接口
 * @author 天使管理员
 */
public interface DpNjService {

    /**
     * 创建ERP南疆口岸仓库制单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createDpNj(@Valid DpNjSaveReqVO createReqVO);

    /**
     * 更新ERP南疆口岸仓库制单
     *
     * @param updateReqVO 更新信息
     */
    void updateDpNj(@Valid DpNjSaveReqVO updateReqVO);

    /**
     * 删除ERP南疆口岸仓库制单
     *
     * @param id 编号
     */
    void deleteDpNj(String id);

    /**
     * 获得ERP南疆口岸仓库制单
     *
     * @param id 编号
     * @return ERP南疆口岸仓库制单
     */
    DpNjDO getDpNj(String id);

    /**
     * 获得ERP南疆口岸仓库制单分页
     *
     * @param pageReqVO 分页查询
     * @return ERP南疆口岸仓库制单分页
     */
    PageResult<DpNjDO> getDpNjPage(DpNjPageReqVO pageReqVO);

    /**
     * 获得ERP南疆制单出库列表
     * @param pageReqVO
     * @return
     */
    PageResult<DpNjDO> dpNjOuterList(DpNjPageReqVO pageReqVO);

    /**
     * ERP南疆制单配车出库
     * @param createReqVO
     */
    void dpNjOutStroe(DispatchVehicleSaveReqVO createReqVO);

    /**
     * 获得ERP南疆制单入库列表
     * @param dispatchNumber
     * @return
     */
    List<DispatchVehicleDO> dpNjEnterList(String dispatchNumber, Integer line, Integer inventoryStatus, Integer dest,String dpId);

    /**
     * ERP南疆运单入库
     * @param createReqVO
     */
    void enterStroeDpNj(List<DispatchVehicleSaveReqVO> createReqVO);


    // ==================== 子表（ERP南疆制单货号详情） ====================

    /**
     * 获得ERP南疆制单货号详情列表
     * @param no 运单号
     * @return ERP南疆制单货号详情列表
     */
    List<DpItemNjDO> getDpItemNjListByNo(String no);

    // ==================== 子表（南疆南疆清单） ====================

    /**
     * 获得南疆南疆清单列表
     * @param no 运单号
     * @return 南疆南疆清单列表
     */
    List<DpEastListNjDO> getDpEastListNjListByNo(String no);

    // ==================== 子表（南疆西线清单） ====================

    /**
     * 获得南疆西线清单列表
     * @param no 运单号
     * @return 南疆西线清单列表
     */
    List<DpWestListNjDO> getDpWestListNjListByNo(String no);

    /**
     * ERP物流南疆制单审核
     * @param dpNjDO
     */
    void examineDpNj(DpNjDO dpNjDO);
    
}